<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>BlackStar Monitor&amp;Profile System</title>
        <meta http-equiv="pragma" content="no-cache" />
        <link rel="stylesheet" type="text/css" href="/static/extjs/resources/css/ext-all.css" rel="stylesheet" />
        <script type="text/javascript" src="/static/extjs/adapter/ext/ext-base.js"></script>
        <script type="text/javascript" src="/static/extjs/ext-all.js"></script>    
        <script type="text/javascript" src="../js/help.js"></script>    
        <script type="text/javascript">
var jvmid = QueryString('jvmid');
var name = QueryString('name');
var type;
function showConfig() {
	Ext.Ajax.request({
		url: '../performance/' + name + '/config?refresh=' + new Date().getTime(),
		success: function (response,options){
			showConfigWin(response.responseText);
		},
		failure: function(response,options){
			Ext.MessageBox.alert("Error","加载性能Agent配置信息出错");
		}
	});
}

var msgMask = new Ext.LoadMask(Ext.getBody(), {removeMask: true});
function reloadPointCut() {
	msgMask.msg = '正在重新加载PointCut配置！';
	
	msgMask.show();
	Ext.Ajax.request({
		url: '../performance/' + jvmid + '/reload',
		success: function (response,options){
			msgMask.hide();
			var data = Ext.util.JSON.decode(response.responseText);
			if (data.message == 'null') {
				Ext.MessageBox.alert("Info",'加载失败：虚拟机可能已经关闭或重启');
			} else {
				Ext.MessageBox.alert("Info",data.message);
			}
		},
		failure: function(response,options){
			msgMask.hide();
			Ext.MessageBox.alert("Error","重载PointCut配置请求错误");
		}
	});
}

function restat(date) {
	msgMask.msg = '正在重新统计';
	Ext.Ajax.request({
		url: '../stat/' + jvmid + '/' + date + '/' + type,
		success: function (response,options){
			msgMask.hide();
			var data = Ext.util.JSON.decode(response.responseText);
			Ext.MessageBox.alert("Info",'重新统计:' + data.result);
		},
		failure: function(response,options){
			msgMask.hide();
			Ext.MessageBox.alert("Error","重新统计请求错误");
		}
	});
}

function restatCurrentHour() {
	msgMask.msg = '正在重新统计最后一个小时性能数据';
	Ext.Ajax.request({
		url: '../stat/' + jvmid + '/CurrentHour/' + type,
		success: function (response,options){
			msgMask.hide();
			var data = Ext.util.JSON.decode(response.responseText);
			Ext.MessageBox.alert("Info",'重新统计最后一个小时性能数据:'  + data.result);
		},
		failure: function(response,options){
			msgMask.hide();
			Ext.MessageBox.alert("Error","重新统计最后一个小时性能数据请求错误");
		}
	});
}

var configWin;
function showConfigWin(text) {
	if (!configWin) {
	 	configWin = new Ext.Window({
	 	   		title:'PointCut配置',    
			    layout:'fit',
			    width:850,
			    height:500,
			    autoScroll : true,
			    closeAction:'hide',
			    plain: true,
			    items : [{
                        layout : 'column', 
                        border : false,
					    width : 800,
                        labelSeparator : '：',
			    		bodyStyle: 'padding:10px;',
                        items : [{
						    	xtype : 'textarea',
						    	id : 'performancePointcutConfig',
						    	width : '99%',
						    	height : 330,
						    	autoScroll: true,
						    	readOnly : true
                        	},{
					            xtype : 'fieldset',       
					            labelAlign : 'left',
					            title : 'PointCut测试',
						    	width : '99%',
			    				bodyStyle: 'padding:10px;',
                                items : [
			                         {
			                            xtype : 'textfield',
			                            fieldLabel : '全类名',
			                            width : 250,
			                            id : 'className'
			                        },{
			                            xtype : 'textfield',
			                            fieldLabel : '方法名',
			                            width : 250,
			                            id : 'methodName'
			                        }]
			            }]
			    	}],
			    buttons: [{
			        text: '测试',
			        handler: function(){
			        	var className = Trim(Ext.getCmp('className').getValue());
			        	var methodName = Trim(Ext.getCmp('methodName').getValue());
			        	if (className.length == 0 || methodName.length == 0)
			        	{
							Ext.MessageBox.alert("Error","类名或方法名不能为空");
			        		return;
			        	}
			        	
						Ext.Ajax.request({
							url: '../performance/' + name + '/test',
							params: { 
									className:  className,
									methodName : methodName
								},
							success: function (response,options){
				   				var data = Ext.util.JSON.decode(response.responseText);
				   				if (data.result == 0) {
									Ext.MessageBox.alert("Info","匹配");
				   				} else if (data.result == 1) {
									Ext.MessageBox.alert("Info","包名不匹配");
				   				} else if (data.result == 2) {
									Ext.MessageBox.alert("Info","类名不匹配");
				   				} else if (data.result == 3) {
									Ext.MessageBox.alert("Info","方法名不匹配");
				   				} else {
									Ext.MessageBox.alert("Info","PointCut配置文件错误，请确认");
				   				}
							},
							failure: function(response,options){
								Ext.MessageBox.alert("Error","PiontCut测试请求错误");
							}
						});
			        }
	            },{
			        text: '关闭',
			        handler: function(){
			            configWin.hide();
			        }
	            }]	                
			});
	}
	
	Ext.getCmp('performancePointcutConfig').setValue(text);
	configWin.show(this);
}

function refresh() {
	Ext.Ajax.request({
		url: '../performance/' + jvmid + '/agent',
		success: function (response,options){
			var data = Ext.util.JSON.decode(response.responseText);
			var cmp;
			for (var item in data)
			{
				cmp = Ext.getCmp(item);
				if (cmp)
				{
				   	cmp.setText(data[item]);
				}
			}
			
			type = data.type;
		},
		failure: function(response,options){
			Ext.MessageBox.alert("Error","加载性能Agent信息出错");
		}
	});
}

Ext.onReady(function(){
    Ext.QuickTips.init();
	Ext.form.Field.prototype.msgTarget = 'side';
	
	var performanceAgentStat = {
            xtype : 'fieldset',       
            labelAlign : 'left',
            title : 'Agent摘要',
            buttonAlign : 'right',
            width : '90%',
            labelWidth : 80,
            items : [{
                        columnWidth : 1,
                        layout : 'form',
                        border : false,
                        items : [{ 
                                        xtype : 'label',
                                        fieldLabel : '类型',
                                        id : 'type',
                                        anchor : '90%'
                               }]
                    }, {
                        layout : 'column', 
                        border : false,
                        labelSeparator : '：',
                        items : [{
                                    columnWidth : 0.5,
                                    layout : 'form',
                                    border : false,
                                    items : [{
                                        xtype : 'label',
                                        fieldLabel : '文件记录次数',
                                        id : 'logTimes',
                                        anchor : '90%'
                                    },{ 
                                        xtype : 'label',
                                        fieldLabel : 'Buffer',
                                        id : 'bufferSize',
                                        anchor : '90%'
                                    }]
                                }, {
                                    columnWidth : 0.5,
                                    layout : 'form',
                                    border : false,
                                    items : [
                                    {
                                        xtype : 'label',
                                        fieldLabel : '平均记录时间',
                                        id : 'logAvarageTime',
                                        anchor : '90%'
                                    },{
                                        xtype : 'label',
                                        fieldLabel : '性能数据',
                                        id : 'logBytes',
                                        anchor : '90%'
                                    }]
                                }]
                    }, {
                        columnWidth : 1,
                        layout : 'form',
                        border : false,
                        items : [{
                                        xtype : 'label',
                                        fieldLabel : '调用信息',
                                        id : 'invokeMessage',
                                        anchor : '90%'
                        		}
                        	]
                    }, 
                    {
                        layout : 'column', 
                        border : false,
                        items : [
			                    {
            						labelWidth : 40,
                                    columnWidth : 0.1,
                                    layout : 'form',
                                    border : false,
                                    items : [{   
										xtype:'button',
				                    	labelSeparator : '',
										text : '更新',
				                        fieldLabel : '  ', 
                                    	tooltip : '更新Agent性能统计信息',
										listeners:{"click":function(obj){
										   refresh();
										   }}
									}]
								},{
            						labelWidth : 40,
                                    columnWidth : 0.1,
                                    layout : 'form',
                                    border : false,
                                    items : [{ 
										xtype:'button',
                    					labelSeparator : '',
				                        fieldLabel : '  ',  
										text : '配置',
                                    	tooltip : '查看Agent PointCut配置',
										listeners:{"click":function(obj){
										   showConfig();
						   				}}
						   			}]
                                },{
            						labelWidth : 40,
                                    columnWidth : 0.7,
                                    layout : 'form',
                                    border : false,
                                    items : [{ 
										xtype:'button',
                    					labelSeparator : '',
				                        fieldLabel : '  ',  
                                    	tooltip : '重载Agent的PointCut配置，对性能有影响，请谨慎使用',
										text : '重载',
										listeners:{"click":function(obj){
										   Ext.MessageBox.confirm('确认', '重载PointCut配置可能会有性能影响，确认操作？', function(id) {
													if (id == 'yes') {
														reloadPointCut();
													}
												});
						   				}}
						   			}]
                                }]
						}]

        };
    
		var performanceExecuteStat = {
            xtype : 'fieldset',       
            labelAlign : 'left',
            title : '性能统计',
            buttonAlign : 'right',
            width : '90%',
            labelWidth : 80,
            items : [{
                        layout : 'column', 
                        border : false,
                        labelSeparator : '：',
                        items : [{
                                    columnWidth : 0.5,
                                    layout : 'form',
                                    border : false,
                                    items : [{
                                        xtype : 'datefield',
                                        fieldLabel : '日期',
                                        id : 'statDate',
                                        format: 'Ymd',
                                        value : new Date(),
                                        editable : false
                                    }]
                                },{
                                    columnWidth : 0.1,
                                    layout : 'form',
                                    border : false,
                                    items : [{
	                                    xtype : 'button',
								        tooltip : '统计操作对系统产生较大的负载，请谨慎使用',
	                                    text : '重新统计',
									    handler: function() {
									     	var date = Ext.getCmp('statDate').getRawValue();
											Ext.MessageBox.confirm('确认', '重新统计操作对系统产生较大的负载，确认操作？', function(id) {
												if (id == 'yes') {
													restat(date);
												}
											});
									     }
								     }]
                                },{
                                    columnWidth : 0.4,
                                    layout : 'form',
                                    border : false,
                                    items : [{
	                                    xtype : 'button',
								        tooltip : '统计操作对系统产生较大的负载，请谨慎使用',
	                                    text : '统计当前小时',
									    handler: function() {
											Ext.MessageBox.confirm('确认', '重新统计操作对系统产生较大的负载，确认操作？', function(id) {
												if (id == 'yes') {
													restatCurrentHour();
												}
											});
									     }
								     }]
                                }]
                    }]

        };

	            
    var viewport = new Ext.Viewport({   
        layout:'border',
        height:'100%',
        width:'100%',
        autoScroll : true,
        enabledTabScroll:true,
        items:[
         {
			  autoScroll : true,
			  enabledTabScroll:true,
         	  bodyStyle: 'padding:20px;',
         	  layout:'anchor',
		      region:"center",    
		      items:[performanceAgentStat,performanceExecuteStat]
		      } 
         ]
    });
    
    refresh();
});
        </script>
    </head>
    <body style="padding: 10px;"></body>
</html>